package datamodule;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import util.FString;
import conexao.Connect;

public class RegimentoDAO {

	private DBuserVO userVO;

	public RegimentoDAO( DBuserVO userVO){
		this.userVO = userVO;
	}

	//Inserir Regimento
	public int inserir(RegimentoVO VOreg) throws ClassNotFoundException, SQLException {
		Connection con = Connect.getConnection(userVO);
		PreparedStatement pstmtInsert = con.prepareStatement(
				"INSERT INTO regimento(reg_Cod_Reg, reg_Item, reg_Pontos, reg_Complemento, " +
				" reg_Periodo, reg_Fator_Gerador, reg_Estatuto, reg_Per_Dias) "+ 
				" VALUES(?,?,?,?,?,?,?,?) ");
		pstmtInsert.setString(1, VOreg.getReg_Cod_Reg());			
		pstmtInsert.setString(2, VOreg.getReg_Item());
		pstmtInsert.setString(3, VOreg.getReg_Pontos());
		pstmtInsert.setString(4, VOreg.getReg_Periodo());
		pstmtInsert.setString(5, VOreg.getReg_Fator_Gerador());
		pstmtInsert.setString(6, VOreg.getReg_Estatuto());
		pstmtInsert.setString(7, VOreg.getReg_Per_Dias());
		pstmtInsert.setString(8, VOreg.getReg_Complemento());
		int reg = pstmtInsert.executeUpdate();	
		con.close();
		return reg;
	}

	//Alterar Regimento
	public int alterar(RegimentoVO VOreg) throws ClassNotFoundException, SQLException {
		Connection con = Connect.getConnection(userVO);
		String virgula = "";
		StringBuffer sql = new StringBuffer(" UPDATE regimento SET ");
		if (!VOreg.getReg_Cod_Reg().equals(FString.ignorar)) {
			sql.append(virgula+" reg_Cod_Reg = '"+VOreg.getReg_Cod_Reg()+"' ");
			virgula = ",";
		}
		if (!VOreg.getReg_Item().equals(FString.ignorar)) {
			sql.append(virgula+" reg_Item = '"+VOreg.getReg_Item()+"' ");
			virgula = ",";
		}
		if (!VOreg.getReg_Pontos().equals(FString.ignorar)) {
			sql.append(virgula+" reg_Pontos = '"+VOreg.getReg_Pontos()+"' ");
			virgula = ",";
		}
		if (!VOreg.getReg_Periodo().equals(FString.ignorar)) {
			sql.append(virgula+" reg_Periodo = '"+VOreg.getReg_Periodo()+"' ");
			virgula = ",";
		}
		if (!VOreg.getReg_Fator_Gerador().equals(FString.ignorar)) {
			sql.append(virgula+" reg_Fator_Gerador = '"+VOreg.getReg_Fator_Gerador()+"' ");
			virgula = ",";
		}
		if (!VOreg.getReg_Estatuto().equals(FString.ignorar)) {
			sql.append(virgula+" reg_Estatuto = '"+VOreg.getReg_Estatuto()+"' ");
			virgula = ",";
		}
		
		if (!VOreg.getReg_Per_Dias().equals(FString.ignorar)) {
			sql.append(virgula+" reg_Per_Dias = '"+VOreg.getReg_Per_Dias()+"' ");
			virgula = ",";
		}
		if (!VOreg.getReg_Complemento().equals(FString.ignorar)) {
			sql.append(virgula+" reg_Complemento = '"+VOreg.getReg_Complemento()+"' ");
			virgula = ",";
		}	
		
		sql.append(" WHERE reg_Cod_Reg = '"+VOreg.getReg_Cod_Reg()+"' ");
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0, sql.length()));
		int registrosAfetados = pstmt.executeUpdate();
		con.close();
		return registrosAfetados;
	}	
	
	// Deletar Regimento
	public int deletar(RegimentoVO VOreg) throws ClassNotFoundException, SQLException {		
		Connection con = Connect.getConnection(userVO);
		PreparedStatement pstmt = con.prepareStatement(
		"DELETE FROM regimento WHERE reg_Cod_Reg = ?");
		pstmt.setString(1, VOreg.getReg_Cod_Reg());
		int registrosAfetados = pstmt.executeUpdate();
		con.close();
		return registrosAfetados;
	}

	//Pesquisar Regimento
	public RegimentoVO pesquisar(RegimentoVO VOreg) throws ClassNotFoundException, SQLException {				
		Connection con = Connect.getConnection(userVO);
		StringBuffer sql = new StringBuffer("SELECT * FROM regimento Where reg_Cod_Reg <> '' ");
		
		if (!VOreg.getReg_Cod_Reg().equals(FString.ignorar)) {
			sql.append(" AND UPPER(reg_Cod_Reg) = '"+VOreg.getReg_Cod_Reg()+"' ");			
		}		
		if (!VOreg.getReg_Item().equals(FString.ignorar)) {
			sql.append(" AND UPPER(reg_Item) = '"+VOreg.getReg_Item()+"' ");			
		}
		//System.out.println(sql);
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));		
		ResultSet rs = pstmt.executeQuery();
		if (rs.next()) {
			VOreg = new RegimentoVO();
			VOreg.setReg_Cod_Reg      ( rs.getString("reg_Cod_Reg"));
			VOreg.setReg_Item         ( rs.getString("reg_Item"));
			VOreg.setReg_Pontos       ( rs.getString("reg_Pontos"));
			VOreg.setReg_Periodo      ( rs.getString("reg_Periodo"));       
			VOreg.setReg_Fator_Gerador( rs.getString("reg_Fator_Gerador"));
			VOreg.setReg_Estatuto     ( rs.getString("reg_Estatuto"));
			VOreg.setReg_Per_Dias     ( rs.getString("reg_Per_Dias"));
			VOreg.setReg_Complemento  ( rs.getString("reg_Complemento"));
		}else {
			VOreg = null;
		}
		pstmt.close();
		rs.close();
		con.close();
		return VOreg;
	}

	public ArrayList<RegimentoVO> geral(RegimentoVO VOreg) throws SQLException, ClassNotFoundException {		
		ArrayList<RegimentoVO> lista = null;
		Connection con = Connect.getConnection(userVO);
		StringBuffer sql = new StringBuffer("SELECT * FROM regimento Where reg_Cod_Reg <> '' ");
		if (!VOreg.getReg_Cod_Reg().equals(FString.ignorar) && !VOreg.getReg_Cod_Reg().isEmpty()) {
			sql.append(" AND UPPER(reg_Cod_Reg) = ('"+VOreg.getReg_Cod_Reg()+"')");
		}
		if (!VOreg.getReg_Item().equals(FString.ignorar) && !VOreg.getReg_Item().isEmpty()) {
			sql.append(" AND UPPER(reg_Item) LIKE UPPER('"+VOreg.getReg_Item()+"%"+"')");
		}
		if (!VOreg.getReg_Pontos().equals(FString.ignorar) && !VOreg.getReg_Pontos().isEmpty()) {
			sql.append(" AND UPPER(reg_Pontos) LIKE UPPER('"+VOreg.getReg_Pontos()+"%"+"')");
		}	
		if (!VOreg.getOrdem().equals(FString.ignorar) && !VOreg.getOrdem().isEmpty()) {
			sql.append(" ORDER BY "+VOreg.getOrdem());
		}
		if (!VOreg.getLimit().equals(FString.ignorar)) {
			sql.append(" LIMIT "+VOreg.getLimit());
		}
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));		
		ResultSet rs = pstmt.executeQuery();
		if (rs.next()) {
			lista = new ArrayList<RegimentoVO>();
			do {
				RegimentoVO reg = new RegimentoVO();
				reg.setReg_Cod_Reg      ( rs.getString("reg_Cod_Reg"));
				reg.setReg_Item         ( rs.getString("reg_Item"));
				reg.setReg_Pontos       ( rs.getString("reg_Pontos"));
				reg.setReg_Periodo      ( rs.getString("reg_Periodo"));
				reg.setReg_Fator_Gerador( rs.getString("reg_Fator_Gerador"));
				reg.setReg_Estatuto     ( rs.getString("reg_Estatuto"));
				reg.setReg_Per_Dias     ( rs.getString("reg_Per_Dias"));
				reg.setReg_Complemento  ( rs.getString("reg_Complemento"));
				
				lista.add(reg);
			}
			while (rs.next());			
		}
		pstmt.close();
		rs.close();
		con.close();
		return lista;
	}	
	
	public ResultSet listagem(RegimentoVO VOreg, Connection con) throws SQLException, ClassNotFoundException {		
		StringBuffer sql = new StringBuffer("SELECT "+
		" regimento.`reg_Estatuto` AS regimento_reg_Estatuto, "+
		" regimento.`reg_Fator_Gerador` AS regimento_reg_Fator_Gerador, "+
		" regimento.`reg_Periodo` AS regimento_reg_Periodo, "+
		" regimento.`reg_Pontos` AS regimento_reg_Pontos, "+
		" regimento.`reg_Item` AS regimento_reg_Item, "+
		" regimento.`reg_Cod_Reg` AS regimento_reg_Cod_Reg "+
		" FROM 	`regimento` regimento "+
		" Where regimento.`reg_Cod_Reg` <> '' ");				
				
		if (!VOreg.getReg_Cod_Reg().equals(FString.ignorar) && !VOreg.getReg_Cod_Reg().isEmpty()) {
			sql.append(" AND UPPER(regimento.`reg_Cod_Reg`) = '"+VOreg.getReg_Cod_Reg()+"'");			
		}		
		if (!VOreg.getReg_Item().equals(FString.ignorar) && !VOreg.getReg_Item().isEmpty()) {
			sql.append(" AND UPPER(regimento.`reg_Item`) like '"+VOreg.getReg_Item()+"%"+"'");			
		}

		if (!VOreg.getReg_Periodo().equals(FString.ignorar) && !VOreg.getReg_Periodo().isEmpty()) {
			sql.append(" AND UPPER(regimento.`reg_Periodo`) like '"+VOreg.getReg_Periodo()+"%"+"'");
		}
		
		if (!VOreg.getOrdem().equals(FString.ignorar) && !VOreg.getOrdem().isEmpty()) {
			sql.append(" ORDER BY "+VOreg.getOrdem());
		}
		if (!VOreg.getLimit().equals(FString.ignorar)) {
			sql.append(" LIMIT "+VOreg.getLimit());
		}
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));
		System.out.println(pstmt);
		ResultSet rs = pstmt.executeQuery();
		return rs;
	}	
	
}